home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 52
/
Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso
/
Aminet
/
comm
/
irc
/
epic4-mos.lha
/
share
/
epic
/
script
/
netsplit
< prev
next >
Wrap
Text File
|
2002-09-18
|
4KB
|
161 lines
# NETSPLIT 7 - This script does it's best to suppress the excessive
# joins and signoffs due ONLY to netsplits. It should pass regular
# signoffs. Need at least ircII2.2pre6
# Version II handles multiple channels. (mycroft)
# Version III ignores bogus signoff messages
# Version IV handles multiple splits.
# Version V handles multiple splits and ignores bogus signoff messages. also
# adds timestamps to split/join messages
# Version VI For ircII2.2pre8 and beyond. Uses encode() and decode()
# Version VII Fixed a problem with encode() and decode() and case
# sensitive channel names, + adding lformat()
#
# This one by Daemon
# CONVERTED for ircII2.2pre8
# Version V by poxaV (cgw@unt.edu), from Daemon's code
# modified last 7-03-93
#shows the current time in HH:MM:SS format
^alias currtime @ function_return = strftime(%T)
# This function tests for bogus splits.
^alias isbogus {
^if ([$3]) { @ function_return = 1 }
^if (rmatch(.$1. $isbogus.pats *..*)) { @ function_return = 1 }
^if (rmatch(.$2. $isbogus.pats *..*)) { @ function_return = 1 }
}
# Add patterns.. like /boguspat *bonk* *thud* *haha*
# that will NOT be treated as server names..
^alias boguspat ^assign isbogus.pats $isbogus.pats $0-;echo $0- added
# Next two are pretty obvious
^alias boguslist echo Pats: $isbogus.pats
^alias bogusclear ^assign -isbogus.pats;echo Bogus list clean
# If first word in Signoff contains a period then assume servername
# and thus a a split. Stash in assoc array.
^ON ^CHANNEL_SIGNOFF "% % %.% %.%" {
if (isbogus($1-))
{ echo *** Signoff: $1 \($2-\) }
{ ^netbroke $encode($tolower($0)) $encode($1) $encode($2).$encode($3) $2 $3 }
}
# Stuff array. Tell us what server broke and set split flag.
^alias netbroke {
@ signcross[$2][$0][$1] = 1
@ signoffs[$0][$1] = [$2]
@ splittime[$2] = time()
^if ( !isbroke[$2] )
{
xecho -level OPNOTES *** Netsplit at $currtime() \($3-\)
@ isbroke[$2] = 1
@ splitname[$2] = [$3-]
}
}
# When a person joins a channel.. Check them against the array.
# If they are in array, then remove silently. Otherwards echo normally
^ON ^JOIN * {
^netjoined $encode($tolower($1)) $encode($0) $1 $0 $USERHOST()
}
# Unset the split flag
^alias netjoined {
if ( signoffs[$0][$1] )
{
^if ( isbroke[$signoffs[$0][$1]] )
{
xecho -level OPNOTES *** Netjoined at $currtime() \($splitname[$signoffs[$0][$1]]\)
}
^assign -isbroke[$signoffs[$0][$1]]
^assign -signcross[$signoffs[$0][$1]][$0][$1]
^assign -signoffs[$0][$1]
}
{
echo *** $3 \($4-\) has joined channel $2
}
}
# Clear the array every 10 minutes to prevent excess garbage
^on #^timer 70 * netclean
^alias netclean {
foreach splittime ii
{
foreach splittime.$ii jj
{
if ( time() - splittime[$ii][$jj] > 300 )
{
foreach signcross.$(ii).$jj xx
{
foreach signcross.$(ii).$(jj).$xx yy
{
@ signcross[$ii][$jj][$xx][$yy] = signoffs[$xx][$yy] = []
}
}
@ xx = yy = isbroke[$ii][$jj] = []
@ splitname[$ii][$jj] = splittime[$ii][$jj] = []
}
}
}
}
^alias netpurge {
purge isbroke
purge splitname
purge splittime
purge signcross
purge signoffs
}
# If you want to suppress mode changes by servers.. (usually after a split)
# then uncomment next line
# ^on ^mode "%.%" #
# If you want to look an array.. Type /show <arrayname>
# Lists keys and contents
^alias showsplit {
if ( [$($0)] )
{
echo $0 $($0)
}
foreach $0 ii
{
showsplit $0.$ii
}
^assign -ii
}
^alias purge {
foreach $0 ii
{
purge $0.$ii
}
^assign -ii
^assign -$0
}
^alias wholeft {
foreach signoffs ii
{
foreach signoffs.$ii jj
{
echo $lformat(15 $decode($ii)) $lformat(10 $decode($jj)) $splitname[$signoffs[$ii][$jj]]
}
}
^assign -ii
^assign -jj
}
# format and lformat differ from $[-num]var and $[num]var in that
# They don't chop off the string if it is too long.
alias lformat {
@ IRCII.word = [$1-]
if (@IRCII.word < [$0])
{ @ function_return = [$([$0]IRCII.word)] }
{ @ function_return = [$IRCII.word] }
}
# Many people contributed to this script.